package Controlador;

import java.rmi.RemoteException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import remoto.Proxy;
import xml.ClienteXmlDao;
import xml.ODV_OrdenDePedidoClienteXML;
import xml.ODV_Out_CotizacionClienteXml;
import xml.ODV_Out_RemitoClienteXml;
import xml.SolicitudRodamientoClienteXML;
import dominio.Cliente;
import dominio.SolicitudRodamientos;
import dominioTO.ClienteTO;
import dominioTO.CotizacionTO;
import dominioTO.OrdenPedidoClienteTO;
import dominioTO.RemitoClienteTO;
import dominioTO.SolicitudRodamientosTO;
import dominioVO.ClienteVO;

public class ODV {
        private static ODV instancia;
        private List<Cliente> clientes;
        
        public static ODV getInstancia()
        {
                if(instancia==null)
                {
                        instancia = new ODV();
                }
                return instancia;
        }
        
        public ODV()
        {
                clientes = new ArrayList<Cliente>();
                
        }
        
        public void altaCliente(ClienteVO cliVO) throws RemoteException
        {
        	ClienteTO aux = Proxy.getInstancia().buscarCliente(cliVO.getCuit());
                if(aux.getCuit()!=cliVO.getCuit())
                {
                Cliente cli = new Cliente();
                cli.setCuit(cliVO.getCuit());
                cli.setRazonSocial(cliVO.getRazonSocial());
                cli.setFechaAlta(Date.valueOf("2014-06-07"));
                cli.setDescuentos(cliVO.getDescuentos());
                cli.setRespInscripto(cliVO.isRespInscripto());
                cli.setIngBrutos(cliVO.getIngBrutos());
                cli.setCondPago(cliVO.getCondPago());
                cli.setEstado(true);
                clientes.add(cli);
                
                List<ClienteTO> listCliTO = new ArrayList<ClienteTO>();
                listCliTO.add(cli.getDTO());
                Proxy.getInstancia().persistirCliente(listCliTO);
                }
                
        }
        public List<ClienteTO> altaClienteXML() throws RemoteException
        {
               
                        List<ClienteTO> listCliTO = ClienteXmlDao.getInstancia().recuperarClientes();                   
                        Proxy.getInstancia().persistirCliente(listCliTO);
                        
                        return listCliTO;

        }
        
        
        public SolicitudRodamientosTO ValidarSolicitudRodamiento(String nombreArchivo) throws RemoteException
        {
        	SolicitudRodamientos solicitudRodCliente = SolicitudRodamientoClienteXML.getInstancia(nombreArchivo).validarCotizacion();
        	
        	List<SolicitudRodamientosTO> dto = new ArrayList<SolicitudRodamientosTO>(); 
        	dto.add(solicitudRodCliente.getDTO());
        	Proxy.getInstancia().persistirSolicitudRodamientosCliente(dto);
        	
        	return solicitudRodCliente.getDTO();
        }
        
        public CotizacionTO CotizarOrdenCliente(String cuit, String OrdenCompraCliente) throws RemoteException
        {
        	CotizacionTO cotizacion = Proxy.getInstancia().generarCotizacion(cuit, OrdenCompraCliente);
        	
        	ODV_Out_CotizacionClienteXml.generarCotizacionXML(cotizacion);
        	return cotizacion;
        }
        
        public void RecibirCotizacionesCliente(String nombreArchivo) throws RemoteException
        {
        	
        	OrdenPedidoClienteTO aux = ODV_OrdenDePedidoClienteXML.getInstancia(nombreArchivo).recibirOrdenPedidoClienteXML();
        	Proxy.getInstancia().persistirOrdenPedidoCliente(aux);
        }
        
        public void verificarOrdenesClienteConSock() throws RemoteException
        {
        	List<RemitoClienteTO> aux = Proxy.getInstancia().verificarOrdenesClienteConSock();
        	System.out.println("\n ODV Vista: " +aux.toString());
        	
        	for(RemitoClienteTO remito:aux)
        	{
        		ODV_Out_RemitoClienteXml.generarCotizacionXML(remito);	
        	}
        	
        }
            
        
        
        
}